#include <REGX52.H>
#include "OneWire.h"

//温度变换
void DS18B20_ConvertT(void)
{
	//初始化
	OneWire_Init();
	//跳过ROM因为此版上的单总线只有DS18B20使用因此可以跳过
	OneWire_SenByte(0xcc);
	//发送温度变化命令
	OneWire_SenByte(0x44);
}


//温度读取
float DS18B20_RadT(void)
{
	float temperature = 0.0;
	int Temp = 0;
	unsigned char Low_Byte = 0;
	unsigned char Tall_Byte = 0;
	//初始化
	OneWire_Init();
	//跳过ROM因为此版上的单总线只有DS18B20使用因此可以跳过
	OneWire_SenByte(0xcc);
	//发送读暂存器命令
	OneWire_SenByte(0xBE);
	//接收低8位温度字节内容
	Low_Byte = OneWire_ReceiveByte();
	//接收高八位温度字节内容
	Tall_Byte = OneWire_ReceiveByte();
	//将两个8位数据拼接
	Temp = (Tall_Byte<<8) | Low_Byte;
	//因为低4位为小数所以转换为int类型时温度的大小会扩大2^4倍
	//（小数位被当成整数位相当于4位小数位相当于整体左移4位（2进制数左移一位就是原先数乘以2））
	//因此在转换回浮点数时需要除16；
	temperature=Temp/16.0;
	return temperature;
}
